﻿/*
火星数排序 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
哈哈，大家对地球上的排序规则都比较清楚了吧！
可是火星上的规则跟地球上的不一样。
地球上的十个数字的顺序是{0,1,2,3,4,5,6,7,8,9}，
火星上的却是{0,8,1,5,2,3,9,4,7,6}。
好在火星上基本数字也是十个，也是十进制，
因此，很容易推得9<80<88<81<… 请根据火星上的规则对火星数进行从小到大的排序。 

Input:
第一行为Case，表明接下来有Case组输入数据,每组数据的开头为N，表明该行接下来有N个数,然后是N个火星数中间以一个空格隔开。 
Output:
每组输出只占一行，为N个经过火星排序的数。 
Sample Input:
4
4 1 2 3 4
2 21 88
3 756 12 3
3 1 98 46
Sample Output:
1 2 3 4
88 21
3 12 756
1 98 46
*/
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
static const int digits[] =
{0, 2, 4, 5, 8, 3, 9, 8, 1, 6};
class MarsNumber
{
	int earth;
	int mars;
private:	
	void toEarth()
	{
		vector<int> v;
		v.reserve(10);
		
		int temp=mars;
		while (temp)
		{
			int k=temp % 10;
			v.push_back(digits[k]);
			temp /= 10;
		}
		earth = 0;
		for (vector<int>::reverse_iterator rit = v.rbegin();
			rit != v.rend();
			++rit)
		{
			earth = earth * 10 + (*rit);
		}
	}	
public:
	MarsNumber(int number = 0) : mars(number)
	{
	}

	friend ostream& operator<<(ostream& os, const MarsNumber& m)
	{
		os << m.mars;
		return os;
	}
	friend istream& operator>>(istream& is, MarsNumber& m)
	{
		is >> m.mars;		
		m.toEarth();
		return is;
	}
	friend bool compare(MarsNumber& m1, MarsNumber& m2)
	{
		return m1.earth < m2.earth;
	}
};

int main()
{
	int groups;
	cin >> groups;
	while (groups--)
	{
		int n;
		vector<MarsNumber> vmars;
		MarsNumber mars;
		for (cin >> n; n--; vmars.push_back(mars))
		{
			cin >> mars;
		}

		sort(vmars.begin(), vmars.end(), compare);
		int i=0, size=vmars.size()-1;
		for (;i<size; ++i)
			cout<<vmars[i]<<" ";
		cout<<vmars[size]<<endl;
	}
	return 0;
}